public class findNthDigit {
    //超时了
    public int findNthDigit1(int n) {
        //来一个可变字符串，一直加数字，然后使用charAt()方法获取第n个数字
        StringBuilder sb = new StringBuilder();
        int i = 1;
        while(sb.length() < n){
            sb.append(i++);
        }
        return sb.charAt(n-1) - '0';
    }
    /**
     * 寻找第n个数字
     * 本方法旨在找出第n个在无限序列1, 2, 3, ...中的数字
     * 通过计算确定数字所在的范围、具体数值以及精确的数字位置
     *
     * @param n 序列中的第n个数字
     * @return 序列中第n个数字的值
     */
    public int findNthDigit(int n) {
        // 初始化数字位数、起始数字和当前位数范围内的数字总数
        int digit = 1;
        long start = 1;
        long count = 9;
        // 1. 确定n所在的数字位数范围
        while (n > count) {
            n -= count;
            start *= 10;
            digit += 1;
            count = digit * start * 9;
        }
        // 2. 计算n所在的具体数字
        long num = start + (n - 1) / digit;
        // 3. 从num中提取第(n - 1) % digit位数字并返回
        return Long.toString(num).charAt((n - 1) % digit) - '0';
    }

}
